<?php

  /**
   * XMLWidget
   *
   * Базовый класс для виджетов, формирующих вывод в формате XML
   */

  abstract class XMLWidget extends CWidget
  {
    /**
     * конструктор
     *
     * @param XMLController $controller экземпляр контроллера
     * @access public
     */
    public function __construct(XMLController $owner)
    {
      parent::__construct($owner);
    }

    /**
     * открыть узел
     *
     * @param string $node  имя узла
     * @param array  $attrs атрибуты узла
     * @return void
     * @access public
     */
    public static function openNode($node, array $attrs = array())
    {
      echo CHtml::openTag($node, $attrs);
    }

    /**
     * закрыть узел
     *
     * @param string $node имя узла
     * @return void
     * @access public
     */
    public static function closeNode($node)
    {
      echo CHtml::closeTag($node);
    }

    /**
     * вывести узел
     *
     * @param string $node  имя узла
     * @param string $text  содержимое узла
     * @param array  $attrs атрибуты узла
     * @return void
     * @access public
     */
    public static function node($node, $text = null, array $attrs = array())
    {
      if ($text)
      {
        $attrs["encode"] = false;
        ($text && array_key_exists("cdata", $attrs) && $attrs["cdata"]) and ($text = CHtml::cdata($text));
        unset($attrs["cdata"]);
      }
      echo CHtml::tag($node, $attrs, $text);
    }

    /**
     * вывести узел, содержащий html-код
     *
     * @param string $node  имя узла
     * @param string $html содержимое узла
     * @param array  $attrs атрибуты узла
     * @return void
     * @access public
     */
    public static function htmlNode($node, $html, array $attrs = array())
    {
      self::node($node, CHtml::encode($html), $attrs);
    }

    /**
     * вывести узел, содержащий информацию о пользователе
     *
     * @param User $user экзепляр модели пользователя
     * @return void
     * @access public
     */
    public static function autorNode(User $user)
    {
      self::htmlNode(User::AUTOR, $user->name, array(
        "id"     => $user->id,
        "login"  => $user->login,
        "avatar" => $user->getAvatar(ContentController::IMG_THUMB))
      );
    }

    /**
     * преобразовать массив в атрибут в формате JSON
     *
     * @param array $arr данные для преобразования
     * @return string
     * @access public
     */
    public static function jsonAttr(array $attr)
    {
      return CHtml::encode(json_encode($attr));
    }
  }

?>